package com.shuang.exception;

import com.shuang.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/*
* 全局异常处理
* */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler
    public Result handleException(Exception e){

        log.error("程序出错啦~", e);

        if (e instanceof ArithmeticException){
            /*在删除班级时，如果班级内有学员 则会拿到自定义的除零异常， 全局异常处理捕获到后反应给前端信息*/
            return Result.error("对不起，该班级下有学生，不能直接删除~");
        }else if (e instanceof NullPointerException ){
            /*在删除部门时，如果部门内有员工，则会拿到自定义的空指针 捕获结果响应给前端*/
            return Result.error("对不起，该部门下有员工，不能直接删除~");
        }

        return Result.error("出错啦，请联系管理员~");

    }

    /*
    * 数据库违反了有唯一约束的 就会报如下异常 捕获唯一约束的是哪个返回给前端
    * */
    @ExceptionHandler
    public Result handleDuplicateKeyException(DuplicateKeyException e){
        log.error("程序出错啦~", e);
        /*拿到错误信息*/
        String message = e.getMessage();
//        拿到错误信息里面的哪个信息错了（手机号，还是用户名） 有唯一约束的不能重复，重复就会报这个DuplicateKeyException异常
        int index = message.indexOf("Duplicate entry");
        String subMessage = message.substring(index);
        String[] arr = subMessage.split(" ");
        String err = arr[2];
        return Result.error(err + "已存在");
    }



}
